// 配置路由
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

import routes from './routes'
//引入仓库
import store from '@/store'


let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace
//重写push|replace   解决多次重复执行抛出NavigationDuplicated的警告错误
//第一个参数：告诉原来push方法，往那跳转(传哪些参数)
//第二个参数：成功回调
//第三个参数：失败回调
VueRouter.prototype.push = function (location, resolve, reject) {
    if (resolve && reject) {
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => { }, () => { })
    }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
    if (resolve && reject) {
        originReplace.call(this, location, resolve, reject)
    } else {
        originReplace.call(this, location, () => { }, () => { })
    }
}


// 配置路由
let router = new VueRouter({
    routes,
    //滚动行为
    scrollBehavior(to, from, savedPosition) {
        // 始终滚动到顶部
        return { y: 0 }
    },
})

//全局守卫，前置守卫(在路由跳转之前调用)
router.beforeEach(async (to, from, next) => {
    //获取token ，用户登录了才会有
    let token = store.state.user.token
    //获取用户名字
    let name = store.state.user.userInfo.name
    if (token) {
        //用户已经登录
        //如果用户已经登录还想去login【休想】
        if (to.path == '/login') {
            //停留在首页
            next('/')
        } else {
            //用户已经登录了，但去的不是login
            if (name) {
                //如果用户名已有
                next()
            } else {
                try {
                    //没有用户信息
                    //派发action获取用户信息
                    await store.dispatch('getUserInfo')
                    //获取用户信息成功
                    next()
                } catch (error) {
                    //token失效了，过期了。获取不到用户信息【重新登录】
                    //清除token（退出登录）
                   await store.dispatch('userLogout')
                   alert('用户信息已过期。请重新登录')
                   next('/login')
                }
            }
        }
    } else {
        // 未登录，不能去交易相关的【addcartsuccess，shopcart，trade，pay，paysuccess，center】
        if(to.meta.isAuth){
            alert('请登录')
        }else{
            next()
        }
    }
})

export default router